package com.rzcode.coinex.kernel.dao.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;

/**
 * 会员邀请统计实体类，用于存储会员邀请好友及返佣统计信息。
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "member_invite_stastic")
public class MemberInviteStastic {

    /**
     * 统计记录ID，主键，自动生成的唯一标识。
     */
    @ApiModelProperty(value = "统计记录ID", required = true, example = "1")
    private Long id;

    /**
     * 会员ID，统计信息所属的会员标识。
     */
    @ApiModelProperty(value = "会员ID", required = true, example = "1")
    private Long memberId;

    /**
     * 用户账户标识，可以是手机号或邮箱，用于识别会员。
     */
    @ApiModelProperty(value = "用户账户标识", required = true, example = "user@example.com")
    private String userIdentify;

    /**
     * 返佣总额（BTC），会员获得的BTC返佣总金额。
     */
    @ApiModelProperty(value = "返佣总额（BTC）", hidden = true)
    private BigDecimal btcReward = BigDecimal.ZERO;

    /**
     * 返佣总额（ETH），会员获得的ETH返佣总金额。
     */
    @ApiModelProperty(value = "返佣总额（ETH）", hidden = true)
    private BigDecimal ethReward = BigDecimal.ZERO;

    /**
     * 返佣总额（USDT），会员获得的USDT返佣总金额。
     */
    @ApiModelProperty(value = "返佣总额（USDT）", hidden = true)
    private BigDecimal usdtReward = BigDecimal.ZERO;

    /**
     * 其他返佣，以JSON格式存储的其他货币返佣信息。
     */
    @ApiModelProperty(value = "其他返佣", example = "{\"LTC\":123, \"EOS\":22.3}")
    private String otherReward;

    /**
     * 折合返佣总额（估算折合USDT），用于总额排名比较的折合金额。
     */
    @ApiModelProperty(value = "折合返佣总额（估算折合USDT）", required = true, example = "1234.56")
    private BigDecimal estimatedReward = BigDecimal.ZERO;

    /**
     * 额外奖励（折合USDT），会员获得的额外奖励金额。
     */
    @ApiModelProperty(value = "额外奖励（折合USDT）", required = true, example = "123.45")
    private BigDecimal extraReward = BigDecimal.ZERO;

    /**
     * 邀请一级好友数量，会员直接邀请的好友数量。
     */
    @ApiModelProperty(value = "邀请一级好友数量", required = true, example = "10")
    private int levelOne;

    /**
     * 邀请二级好友数量，会员间接邀请的好友数量。
     */
    @ApiModelProperty(value = "邀请二级好友数量", required = true, example = "20")
    private int levelTwo;

    /**
     * 是否机器人，标识会员是否为机器人账户。
     */
    @ApiModelProperty(value = "是否机器人", hidden = true)
    @JsonIgnore
    private int isRobot = 0;

    /**
     * 统计日期，该统计信息对应的日期。
     */
    @ApiModelProperty(value = "统计日期", required = true, example = "2023-01-01 01:00:00")
    private String stasticDate;
}
